#define _CRT_SECURE_NO_WARNINGS 1
//#include <iostream>
//#include <vector>
//#include "rbtree.hpp"
//#include <stdlib.h>
//template<class T>
//class Aurora
//{
//public:
//	void Print()
//	{
//		std::cout << "哈哈" << std::endl;
//	}
//};
//template<class Complate>
//void func(Complate com)
//{
//	com.Print();
//}
//#include <iostream>
//using namespace std;
//#include <string>
//#include <map>
//#include <set>
//
//
//
//typedef pair<string, int> Word;
//class Compare {
//  public:
//    bool operator()(const Word& left, const Word& right)const {
//        // 次数从大到小排序
//        // 如果次数相同，再按照单词字典序排序
//        return (left.second > right.second) || 
//               (left.second == right.second && left.first < right.first);
//    }
//};
//
//void test()
//{
//	std::set<int> s;
//	s.insert(1);
//	s.insert(2);
//	s.insert(3);
//	func(Aurora<int>());
//}

//void rbtreeTest()
//{
//	Aurora::RBTree<int> rb;
//	for (int i = 0; i < 10000000; i++)
//	{
//		rb.insert(i);
//	}
//	//rb.InOrder();
//	//std::cout << std::endl;
//	Aurora::RBTreeNode<int>* f = rb.Find(1111111111);
//	if (f != nullptr) std::cout << "有该值" << std::endl;
//	else std::cout << "没有该值" << std::endl;
//	std::cout << "节点个数:" << rb.size() << std::endl;
//	std::cout << "高度:" << rb.Hight() << std::endl;
//	std::cout << rb.IsRBTree() << std::endl;
//}
//void RBtree()
//{
//	const int N = 10000000;
//	srand(time(nullptr));
//	Aurora::RBTree<int> rb;
//	std::vector<int> v;
//	for (int i = 0; i < N; i++)
//	{
//		v.push_back(rand() + i);
//		//rb.insert( i);
//	}
//	size_t begin1 = clock();
//	for (const auto& e : v)
//	{
//		rb.insert(e);
//	}
//	size_t end1 = clock();
//	size_t begin2 = clock();
//	for (const auto& e : v)
//	{
//		rb.Find(e);
//	}
//	size_t end2 = clock();
//	std::cout << "插入时间:" << end1 - begin1 << std::endl;
//	std::cout << "查找时间:" << end2 - begin2 << std::endl;
//	std::cout << "高度:" << rb.Hight() << std::endl;
//	std::cout << "节点个数:" << rb.size() << std::endl;
//	std::cout << "是否红黑树:" << rb.IsRBTree() << std::endl;
//}
#include <iostream>
#include "mymap.hpp"
#include "myset.hpp"
//void rbKV()
//{
//	Aurora::RBTree<int, int> rb;
//	rb.insert({ 1,2 });
//	rb.insert({ 3,4 });
//	rb.insert({ 5,6 });
//	rb.insert({ 7,8 });
//	rb.insert({ 9,10 });
//	rb.InOrder();
//	std::cout << std::endl;
//	std::cout << rb.IsRBTree() << std::endl;
//	Aurora::RBTreeNode<int, int>* f = rb.Find(7);
//	if (f != nullptr)
//	{
//		std::cout << f->_kv.second << std::endl;
//	}
//}

void test_set()
{
	Aurora::set<int> s;
	int a[] = { 4,2,6,1,3,5,15,7,16,14, };
	for (const auto& e : a)
	{
		s.insert(e);
	}
	for (const auto& e : s)
	{
		std::cout << e << " ";
	}
	std::cout << std::endl;
	Aurora::set<int>::iterator it = s.end();
	while (it != s.begin())
	{
		it--;
		std::cout << *it << " ";
	}
	std::cout << std::endl;
}
void test_map()
{
	Aurora::map<std::string, std::string> dict;
	dict.insert({ "left","左边" });
	dict.insert({ "right","右边" });
	dict.insert({ "sort","排序" });
	Aurora::map<std::string, std::string>::iterator it = dict.begin();
	while (it != dict.end())
	{
		std::cout << it->first << ":" << it->second << std::endl;
		it++;
	}
	std::cout << std::endl;
	it = dict.end();
	while (it != dict.begin())
	{
		it--;
		std::cout << it->first << ":" << it->second << std::endl;
	}

}
//template<class Container>
//void Print(const Container& con)
//{
//	typename Container::const_iterator it = con.begin();
//	while (it != con.end())
//	{
//		std::cout << it << " ";
//		it++;
//	}
//	std::cout << std::endl;
//}
void Print1(const Aurora::map<std::string, std::string>& con)
{
	Aurora::map<std::string, std::string>::const_iterator it = con.begin();
	while (it != con.end())
	{
		std::cout << it->first << " " << it->second << std::endl;
		it++;
	}
	std::cout << std::endl;
}
void ConstIterator_test_set()
{
	Aurora::set<int> s;
	s.insert(1);
	s.insert(2);
	s.insert(3);
	s.insert(4);
	//Print(s);
	Aurora::set<int>::iterator it = s.begin();
	while (it != s.end())
	{
		std::cout << *it << " ";
		it++;
	}
}
void ConstIterator_test_map()
{
	Aurora::map<std::string, std::string> dict;
	dict.insert({ "left","左边" });
	dict.insert({ "right","右边" });
	dict.insert({ "sort","排序" });
	dict["left"] = "左边,剩余";
	dict["instrt"] = "插入";
	dict["string"];
	//Print1(dict);
	Aurora::map<std::string, std::string>::iterator it = dict.begin();
	while (it != dict.end())
	{
		//it->second += 'x';
		std::cout << it->first << ":" << it->second << std::endl;
		it++;
		
		//it->first += 'x';
	}
}
int main()
{
	//test_set();
	//test_map();
	//ConstIterator_test_set();
	ConstIterator_test_map();
	return 0;
}